package com.sugon.entity;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.sugon.modules.device.model.DevRepairReplaceSparePartItemVO;
import lombok.Data;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 维修记录单实体
 * 表名 DEV_MAINTEN_REPAIR
 *
 * @author sugon
 * @date 2019-07-18 11:39:51
 */
@JsonInclude(JsonInclude.Include.NON_NULL)
@Data
public class DevMaintenRepairEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 设备ID
     */
    private String devId;
    /**
     * 设备名称
     */
    private String devName;

    /**
     * 设备编码
     */
    private String devCode;

    /**
     * 故障时间
     */
    private Integer faultTime;
    /**
     * 备注信息
     */
    private String remark;
    /**
     * 解决办法
     */
    private String solution;
    /**
     * 原因
     */
    private String reason;
    /**
     * 故障描述
     */
    private String recordDescr;

    /**
     * 报修单号编码
     */
    private String maintenRecordCode;
    /**
     * 报修单ID
     */
    private String maintenRecordId;
    /**
     * 主键
     */
    private String id;

    /**
     * 故障时长：生产班组长进行效果确认节点
     * 由效果确认时间 - 上报时间计算得出
     */
    private Long faultNum;

    /**
     * 维修结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
    private Date repairEndDate;
    /**
     * 维修开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
    private Date repairStartDate;

    /**
     * 上报时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
    private Date uploadDate;

    /**
     * 上报时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
    private Date gmtCreate;

    /**
     * 维修人ID
     */
    private String repairUser;

    /**
     * 维修人姓名
     */
    private String repairUsername;

    /**
     * 故障代码：一般为发生故障时由第三方传递过来的代码
     */
    private String faultCode;

    /**
     * 故障描述：一般为发生故障时由第三方传递过来的故障信息
     */
    private String faultDesc;

    /**
     * 报警故障ID：是长安内部自己建立的报警代码库
     * 取值自：ALARM_CODE_BASE
     * 是根据设备ID + faultCode ,去系统查询回填而来的
     */
    private String faultId;

    /**
     * 报警/故障分类ID，一般为cccId
     */
    private String faultCategoryId;

    /**
     * 报警来源
     */
    private String source;

    /**
     * 协助等级：1 2 3
     * 维修工自己维修，那么默认是1
     * 触发二级协助，2
     * 触发三级协助，3
     */
    private Integer orderNo;

    /**
     * 二级协助人用户名
     */
    private String level2AssistUser;

    /**
     * 二级协助开始时间
     */
    private Date level2AssistStartTime;

    /**
     * 二级协助结束时间
     */
    private Date level2AssistEndTime;

    /**
     * 二级协助备注信息
     */
    private String level2AssistRemark;

    /**
     * 三级协助人用户名
     */
    private String level3AssistUser;

    /**
     * 三级协助开始时间
     */
    private Date level3AssistStartTime;

    /**
     * 三级协助结束时间
     */
    private Date level3AssistEndTime;

    /**
     * 三级协助备注信息
     */
    private String level3AssistRemark;

    /**
     * 是否删除标志
     */
    private Integer delFlag;

    /**
     * 统计的数量
     */
    private Integer num;

    /**
     * 车间ID
     */
    private String workshopId;

    /**
     * 车间名称
     */
    private String workshopName;
    /**
     * 工序名称
     */
    private String devProceName;
    /**
     * 工序号
     */
    private String devProceNo;

    /**
     * 设备小类编码：
     */
    private String devTypeS;

    /**
     * 产线名称
     */
    private String devProductName;

    /**
     * 设备类型 1普通设备 2 能源设备
     */
    private String devKind;

    /**
     * 创建人
     */
    private String createBy;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;

    /**
     * 最近一次更新人员
     */
    private String updateBy;

    /**
     * 最近一次更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;

    /**
     * 附件：一般用于制定维护措施时添加附件用
     */
    private String attachment;

    /**
     * 故障预防措施列表
     */
    private List<DevFaultPreventMeasure> preventMeasureList;

    /**
     * 报警现场照片：由现场人员拍摄的故障图片
     */
    private List<String> faultImages;

    /**
     * 维修过程中更换的备件列表
     */
    private List<DevRepairReplaceSparePartItemVO> replaceSpareList;

    public List<DevRepairReplaceSparePartItemVO> getReplaceSpareList() {
        if (replaceSpareList == null) {
            replaceSpareList = new ArrayList<>();
        }
        return replaceSpareList;
    }

    /***************VO字段***************/
    /**
     * VRT ID
     */
    private String vrtId;

    /**
     * VRT名称
     */
    private String vrtName;

    /**
     * VFG ID
     */
    private String vfgId;

    /**
     * 报警分类名称
     */
    private String faultCategoryName;

}
